package homework;

import java.util.LinkedList;
import java.util.Queue;

/**
 * @author noob
 * @version 1.0
 * @date 2021/3/15 6:41
 * 使用队列实现栈
 * 一般队列不特别指明：都是一端插入，一端删除的普通队列
 */
public class MyStack {
    private Queue<Integer> queue;

    public MyStack(Queue<Integer> queue) {
        this.queue = new LinkedList<>();
    }

    public boolean isEmpty(){
        return queue.isEmpty();
    }


    /**
     * 入栈操作：
     * @param x
     */
    public void push(int x){
        queue.add(x);
    }

    /**
     * 出栈操作
     * 注意：取出"栈顶":队尾的元素。必须从队头出队n-1个元素，剩余队尾的元素，就是 "栈顶"元素了
     * 借助：辅助队列queue2
     * @return
     */
    public int pop(){
        Queue<Integer>  queue2 = new LinkedList<>();

        while (queue.size()>1){
            queue2.add(queue.remove());
        }
        int ret = queue.remove();

        queue = queue2;

        return ret;
    }

    /**
     * 思路：取出栈顶元素，然后再添加进去
     * 返回栈顶元素
     * @return
     */
    public int top(){
        int ret = pop();
        push(ret);
        return ret;

    }


}
